{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. 对连续型特征，可以用哪个函数可视化其分布？（给出你最常用的一个即可），并根据代码运行结果给出示例。（10分） "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以用seaborn的distplot可视化其直方图和分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "#dpath = \"./data\"\n",
    "df = pd.read_csv(\"boston.csv\")\n",
    "\n",
    "#目标y的直方图/分布\n",
    "fig = plt.figure()\n",
    "sns.distplot(df[\"MEDV\"], bins = 30, kde = True)\n",
    "plt.xlabel(\"Median value of owner-occupied homes\", fontsize = 12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2. 对两个连续型特征，可以用哪个函数得到这两个特征之间的相关性？根据代码运行结果，给出示例。（10分） "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以通过jointplot函数观察其特征之间的相关性"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x432 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.jointplot(x = \"RM\", y = \"MEDV\", data = df, kind = \"scatter\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3. 如果发现特征之间有较强的相关性，在选择线性回归模型时应该采取什么措施。（10分） "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "加入正则项，用领回归或lasso回归模型进行训练"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4. 当采用带正则的模型以及采用随机梯度下降优化算法时，需要对输入（连续型）特征进行去量纲预处理。课程代码给出了用标准化（StandardScaler）的结果，请改成最小最大缩放（MinMaxScaler）去量纲 （10分），并重新训练最小二乘线性回归、岭回归、和Lasso模型（30分）。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/preprocessing/data.py:334: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by MinMaxScaler.\n",
      "  return self.partial_fit(X, y)\n"
     ]
    }
   ],
   "source": [
    "#从原始数据中分离输入特征x和输出y\n",
    "y = df['MEDV']\n",
    "X = df.drop('MEDV', axis = 1)\n",
    "\n",
    "#尝试对y作log变换，对log变换后的价格进行评估\n",
    "log_y = np.log1p(y)\n",
    "\n",
    "X[\"RAD\"].astype(\"object\")\n",
    "x_cat = X[\"RAD\"]\n",
    "x_cat = pd.get_dummies(x_cat, prefix = \"RAD\")\n",
    "\n",
    "x = X.drop(\"RAD\", axis = 1)\n",
    "\n",
    "#特征名称，用于保存特征工程结果\n",
    "feat_name = X.columns\n",
    "\n",
    "#数据归一化\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "#分别初始化对特征值的归一化器\n",
    "mm_X = MinMaxScaler()\n",
    "\n",
    "#分别对训练和测试数据的特征以及目标值进行标准化处理\n",
    "#对训练数据，先调用fit方法训练模型，得到模型参数；然后对训练数据和测试数据进行transform\n",
    "X = mm_X.fit_transform(X)\n",
    "\n",
    "fe_data = pd.DataFrame(data = X, columns = feat_name, index = df.index)\n",
    "fe_data = pd.concat([fe_data, x_cat], axis = 1, ignore_index = False)\n",
    "\n",
    "#加上标签\n",
    "fe_data[\"MEDV\"] = y\n",
    "fe_data[\"log_MEDV\"] = log_y\n",
    "\n",
    "fe_data.to_csv('FE_boston_minmax.csv', index = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.6731699209019206\n",
      "[-0.87687518  0.15074344  0.06046444  0.10224868 -0.37621691  0.4157293\n",
      "  0.02743316 -0.55220253  0.10800382 -0.25564247 -0.32905857 -1.03584461\n",
      " -0.11433484 -0.03823805  0.04676302 -0.03140108 -0.00763613 -0.04470998\n",
      "  0.05738762  0.03794531  0.09422411]\n",
      "3.6628907472603425\n",
      "[-0.84614071  0.14598996  0.05669741  0.10360271 -0.36723722  0.42019317\n",
      "  0.02496778 -0.53765529  0.10396207 -0.25026638 -0.32665711 -1.0287135\n",
      " -0.1138921  -0.03585271  0.04714617 -0.03123958 -0.00702133 -0.044019\n",
      "  0.05649289  0.03857754  0.08980813]\n",
      "3.6569936850136724\n",
      "[-0.85781339  0.1426088   0.04852351  0.10291996 -0.3625365   0.41640306\n",
      "  0.02315139 -0.54096028  0.12356463 -0.24232727 -0.32616982 -1.03451281\n",
      " -0.10090192 -0.02241612  0.05569939 -0.02195628  0.         -0.0369731\n",
      "  0.06037404  0.04157963  0.07881109]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/model_selection/_split.py:2053: FutureWarning: You should specify a value for 'cv' instead of relying on the default value. The default value will change from 3 to 5 in version 0.22.\n",
      "  warnings.warn(CV_WARNING, FutureWarning)\n",
      "/Users/liyong/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/coordinate_descent.py:492: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Fitting data with very small alpha may cause precision problems.\n",
      "  ConvergenceWarning)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression, RidgeCV, LassoCV\n",
    "\n",
    "data = pd.read_csv(\"FE_boston_minmax.csv\")\n",
    "\n",
    "y = data['MEDV']\n",
    "log_y = data['log_MEDV']\n",
    "X = data.drop(['MEDV', 'log_MEDV'], axis = 1)\n",
    "\n",
    "lr = LinearRegression()\n",
    "lr.fit(X, log_y)\n",
    "\n",
    "print(lr.intercept_)\n",
    "print(lr.coef_)\n",
    "\n",
    "alphas = [0.01, 0.1, 1, 10, 100, 1000]\n",
    "rcv = RidgeCV(alphas = alphas)\n",
    "rcv.fit(X, log_y)\n",
    "\n",
    "print(rcv.intercept_)\n",
    "print(rcv.coef_)\n",
    "\n",
    "lcv = LassoCV()\n",
    "lcv.fit(X, log_y)\n",
    "\n",
    "print(lcv.intercept_)\n",
    "print(lcv.coef_)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "5. 代码中给出了岭回归（RidgeCV）和Lasso（LassoCV）超参数（alpha_）调优的过程，请结合两个最佳模型以及最小二乘线性回归模型的结果，给出什么场合应该用岭回归，什么场合用Lasso，什么场合用最小二乘。（30分） "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "L1会趋向于产生少量的特征，而其他的特征都是0，而L2会选择更多的特征，这些特征都会接近于0。Lasso在特征选择时候非常有用，而Ridge就只是一种规则化而已。\n",
    "所以，在所有特征中只有少数特征起重要作用的情况下，选择Lasso比较合适，因为它能自动选择特征。而如果所有特征中，大部分特征都能起作用，而且起的作用很平均，那么使用Ridge也许更合适。而特征之间相关性很小的情况下，可以用最小二乘。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
